home *** CD-ROM | disk | FTP | other *** search
- /*
- * Think C 5.04 source for NoBalloonMenu 1.0.1
- *
- * Copyright © 1994 by Malcolm Davidson, Sydney, Australia.
- * Email: mrd@mpe67.dmpe.csiro.au
- */
-
- /* #include <MacHeaders> */
- #include <SetUpA4.h>
-
- #define GetResourceNum 0xA9A0 /* Trap number for GetResource */
- #define kHMHelpMenuID -16490 /* Help Menu ID */
-
-
- long OldGetResource; /* pointer to real GetResource */
-
- pascal void NewGetResource(void);
- void main(void);
-
-
- /*************************************************************************/
- /*
- * Patch GetResource to remove the Balloon Help Menu before doing its stuff.
- * Note that this patch preserve all registers apart from A0 and D0
- * (See IM1, p113)
- */
-
- pascal void NewGetResource(void)
- {
- asm { /* Ensure A1 is preserved when setting up A4 */
- move.l A1,A0 ; save A1
- jsr __GetA4 ;
- move.l A4,-(sp) ; save old A4
- move.l (A1),A4 ; get new A4
- move.l A0,A1 ; restore old A1
- movem.l D1-D7/A1-A6,-(sp) ; save non-trashable registers
- }
-
-
- /*
- * Remove Balloon Help from the MenuList.
- * If Help MenuID is not found then DeleteMenu does nothing.
- */
- if(MenuList) DeleteMenu(kHMHelpMenuID);
-
- asm {
- movem.l (sp)+,D1-D7/A1-A6 ; restore saved registers
- move.l OldGetResource,A0 ; prepare to jmp
- move.l (sp)+,A4 ; restore A4
- jmp (A0) ; jump to real GetResource
- }
- }
-
- /*************************************************************************/
- void main()
- {
- Handle ourH; /*handle to our code resource*/
-
- RememberA0(); /*to access resource globals*/
- SetUpA4();
-
- asm {
- _RecoverHandle ; A0 points to our code
- move.l A0,ourH ; get handle to us
- }
-
- DetachResource(ourH); /* ensure our code remains after install */
- HLock(ourH); /* Lock us down */
-
- /* Create Patch */
-
- OldGetResource = NGetTrapAddress(GetResourceNum,ToolTrap);
- NSetTrapAddress((long)NewGetResource,GetResourceNum,ToolTrap);
-
- RestoreA4();
- }
-
-